<?php

class CotizadorQualitas {
  var $__uriMetodoConsulta;
  var $strFuncion;
  var $arrParametros;
  
  /**
   * @var WSSESoapClient
   */
  var $__oResCliente;
  
  /**
   * @param DatosCotizacionQualitas $oDatoCot
   */
  static function CotizarDesdeObjetoQualitas($oDatoCot, $intPaquete) {
    $strFuncion = "obtenerNuevaEmision";
    $oCot       = new CotizadorExtendido();
    $oCotQua    = new CotizacionQualitas();
    
    $oCotQua->strXMLEnvio      = CotizacionQualitas::ObtenerXMLPeticion($oDatoCot, $intPaquete);
    
    $oCot->__uriMetodoConsulta = "http://sio.qualitas.com.mx/WsEmision/WsEmision.asmx";
    $oCot->__strXMLActual      = $oCotQua->strXMLEnvio;

    $oCot->ObtenerResultadoFuncionWebService($strFuncion, $arrParamsFunc);
    
    $strRes = $oCot->__oResCliente->__last_response;
    $strRes = substr($strRes, strpos($strRes, "obtenerNuevaEmisionResult") + strlen("obtenerNuevaEmisionResult") + 1);
    $strRes = substr($strRes, 0, strpos($strRes, "obtenerNuevaEmisionResult") - 2);
    $strRes = str_replace("&gt;", ">", $strRes);
    $strRes = str_replace("&lt;", "<", $strRes);
    
    $oCotQua->strXMLRespuesta = $strRes;
    
    $arrParseado = CotizadorQualitas::ParseXML($strRes);
    
    $oCotQua->strArrDatos = serialize($arrParseado);
    
    $oCotQua->intIdDatoCotizacion = $oDatoCot->intIdDatoCotizacion;
    $oCotQua->intTipo         = $intPaquete;
    
    $oCotQua->strNoCotizacion = $arrParseado["datos"]["no_cotizacion"];
    $oCotQua->strNoEndoso     = $arrParseado["datos"]["no_endoso"    ];
    $oCotQua->strTipoEndoso   = $arrParseado["datos"]["tipo_endoso"  ];
    $oCotQua->strNoOtra       = $arrParseado["datos"]["no_otra"      ];

    $oCotQua->fltPrimaNeta    = $arrParseado["primas"]["primaneta" ];
    $oCotQua->fltPrimaTotal   = $arrParseado["primas"]["primatotal"];
    
    $oCotQua->GuardarObjeto(true, true);
    
    return $oCotQua;
  }
  
  /**
   * @param DatosCotizacionQualitas $oDatoCot
   */
  static function PolizaDesdeObjetoQualitas($oDatoCot, $intPaquete) {
    $strFuncion = "obtenerNuevaEmision";
    $oCot       = new CotizadorExtendido();
    $oCot2      = new CotizadorExtendido();
    
    $oCot->__strXMLActual      = CotizacionQualitas::ObtenerXMLPeticion($oDatoCot, $intPaquete, "P");
    $oCot->__uriMetodoConsulta = "http://sio.qualitas.com.mx/WsEmision/WsEmision.asmx";

    $oDatoCot->txtArrInfoExtraPoliza = serialize($_POST["datos"]);
    $oDatoCot->txtXMLPolizaEnvio     = $oCot->__strXMLActual;
    $oDatoCot->GuardarObjeto();
    
//*
    $oCot->ObtenerResultadoFuncionWebService($strFuncion, $arrParamsFunc);
    
    $strRes = $oCot->__oResCliente->__last_response;
    $strRes = substr($strRes, strpos($strRes, "obtenerNuevaEmisionResult") + strlen("obtenerNuevaEmisionResult") + 1);
    $strRes = substr($strRes, 0, strpos($strRes, "obtenerNuevaEmisionResult") - 2);
    $strRes = str_replace("&gt;", ">", $strRes);
    $strRes = str_replace("&lt;", "<", $strRes);
// */ global $strGPath; $strRes = file_get_contents("$strGPath/scripts/ejemplo.xml");
    
    $oCotQua->strXMLRespuesta = $strRes;
    
    $arrParseado = CotizadorQualitas::ParseXMLPoliza($strRes);
    
    $oDatoCot->txtXMLPolizaRespuesta = $strRes;
    $oDatoCot->txtArrInfoPoliza      = serialize($arrParseado);
    $oDatoCot->GuardarObjeto();
    
    if($arrParseado["error"]) {
      $oDatoCot->strUrlPDFPoliza = "Error: {$arrParseado["error"]}";
      $oDatoCot->GuardarObjeto();
      return $oDatoCot->strUrlPDFPoliza;
    }
    
    $strFuncion = "RecuperaImpresionPrueba";
    
    $arrParamsFunc["nPoliza"   ] = substr($arrParseado["datos"]["no_poliza"], 2, 10);
    $arrParamsFunc["URLPoliza" ] = "";
    $arrParamsFunc["URLRecibo" ] = "";
    $arrParamsFunc["URLTextos" ] = "";
    $arrParamsFunc["Inciso"    ] = "0001";
    $arrParamsFunc["ImpPol"    ] = "0";
    $arrParamsFunc["ImpRec"    ] = "0";
    $arrParamsFunc["ImpAnexo"  ] = "0";
    $arrParamsFunc["Ramo"      ] = "04";
    $arrParamsFunc["formaPol"  ] = "poliza_aut_emi_1";
    $arrParamsFunc["formaRec"  ] = "recibo_pdf";
    $arrParamsFunc["formaAnexo"] = "polizaf2_pdf";
    $arrParamsFunc["Endoso"    ] = "000000";
    $arrParamsFunc["NoNegocio" ] = "02795";
    $arrParamsFunc["Agente"    ] = "2113";
    $arrParamsFunc["Usuario"   ] = "ajale";
    $arrParamsFunc["Password"  ] = "jalea";
    
    $oCot2->strUsername = "";
    $oCot2->strPassword = "";
    
    
//*
    $oCot2->__uriMetodoConsulta = "http://qbcenter.qualitas.com.mx/QBCImpresion/Service.asmx";
    $oCot2->ObtenerResultadoFuncionWebService($strFuncion, $arrParamsFunc);
// */
    
    $strXMLRes = $oCot2->__oResCliente->__last_response;
    $strXMLRes = substr($strXMLRes, strpos($strXMLRes, "<RecuperaImpresionPruebaResult"));
    $strXMLRes = substr($strXMLRes, strpos($strXMLRes, ">") + 1);
    $strXMLRes = substr($strXMLRes, 0, strpos($strXMLRes, "</RecuperaImpresionPruebaResult"));
    
    $oDatoCot->txtXMLImpresionEnvio     = $oCot2->__oResCliente->__last_request ;
    $oDatoCot->txtXMLImpresionRespuesta = $oCot2->__oResCliente->__last_response;
    $oDatoCot->txtArrInfoImpresion      = serialize(explode("|", $strXMLRes));
    $oDatoCot->strUrlPDFPoliza          = $strXMLRes;
    $oDatoCot->GuardarObjeto();
    
    return $strXMLRes;
  }
  
  /**
   * @param CotizacionQualitas $oCotizacion
   */
  static function ParseXMLPoliza($strXML) {
    $p = xml_parser_create();
    xml_parse_into_struct($p, $strXML, $arrValues, $arrIndex);
    xml_parser_free($p);
    
    // Buscar los valores de la cotizacion, poliza, etc
    foreach($arrValues as $arrLinea) {
      if($arrLinea["tag"] == "MOVIMIENTO") {
        $arrCoberturas["datos"]["no_poliza"   ] = $arrLinea["attributes"]["NOPOLIZA"   ];
        $arrCoberturas["datos"]["no_endoso"   ] = $arrLinea["attributes"]["NOENDOSO"   ];
        $arrCoberturas["datos"]["tipo_endoso" ] = $arrLinea["attributes"]["TIPOENDOSO" ];
        $arrCoberturas["datos"]["no_otra"     ] = $arrLinea["attributes"]["NOOTRA"     ];
      }
      if(($arrLinea["tag"] == "DATOSASEGURADO") && (isset($arrLinea["attributes"]["NOASEGURADO"]))) {
        $arrCoberturas["datos"]["no_asegurado"] = $arrLinea["attributes"]["NOASEGURADO"];
        break;
      }
    }
    
    $intEnCobertura       = 0;
    $intEnPrima           = 0;
    $intEnRecibo          = 0;
    $intEnConsideraciones = 0;
    $intTipoReglaConsider = 0;
    foreach($arrValues as $arrLinea) {
      if($arrLinea["tag"] == "CODIGOERROR") {
        $arrCoberturas["error"] = $arrLinea["value"];
      } else if(($arrLinea["tag"] == "COBERTURAS") && ($arrLinea["level"] == "4") && ($arrLinea["type"] == "open")) {
        $intEnCobertura = $arrLinea["attributes"]["NOCOBERTURA"];
      } else if(($intEnCobertura != 0) && ($arrLinea["level"] == "5")) {
        $arrCoberturas["coberturas"][$intEnCobertura][strtolower($arrLinea["tag"])] = $arrLinea["value"];
      } else if(($intEnCobertura != 0) && ($arrLinea["level"] == "4") && ($arrLinea["tag"] == "COBERTURAS")) {
        continue;
      } else {
        $intEnCobertura = 0;
        
        if(($arrLinea["tag"] == "PRIMAS") && ($arrLinea["level"] == "3")) {
          $intEnPrima = 1;
        } else if(($intEnPrima != 0) && ($arrLinea["level"] == "4")) {
          $arrCoberturas["primas"][strtolower($arrLinea["tag"])] = $arrLinea["value"];
        } else {
          $intEnPrima = 0;
          
          if(($arrLinea["tag"] == "RECIBOS") && ($arrLinea["level"] == "3") && ($arrLinea["type"] == "open")) {
            $intEnRecibo = $arrLinea["attributes"]["NORECIBO"];
          } else if((($intEnRecibo != 0) && ($arrLinea["level"] == "4")) || ($intEnRecibo != 0) && ($intEnConsideraciones != 0) && ($arrLinea["level"] == "5"))  {
            if(($intEnConsideraciones != 0) && ($arrLinea["level"] == "5")) {
              if($arrLinea["tag"] == "TIPOREGLA") {
                $intTipoReglaConsider = $arrLinea["value"];
              } else {
                $arrCoberturas["recibos"][$intEnRecibo]["consideraciones"][$intEnConsideraciones][$intTipoReglaConsider] = $arrLinea["value"];
              }
            } else if(($arrLinea["tag"] == "CONSIDERACIONESADICIONALESR") && ($arrLinea["type"] == "open")) {
              $intEnConsideraciones = $arrLinea["attributes"]["NOCONSIDERACION"];
            } else {
              $arrCoberturas["recibos"][$intEnRecibo][strtolower($arrLinea["tag"])] = $arrLinea["value"];
            }
          } else if(($intEnRecibo != 0) && ($arrLinea["tag"] == "RECIBOS") && ($arrLinea["level"] == "3") && ($arrLinea["type"] != "open")) {
          } else {
            if($intEnConsideraciones) {
              $intEnConsideraciones = 0;
            } else {
              $intEnRecibo = 0;
            }
          }
        }
      }
    }
    
    return $arrCoberturas;
  }
  
  /**
   * @param CotizacionQualitas $oCotizacion
   */
  static function ParseXML($strXML) {
    $p = xml_parser_create();
    xml_parse_into_struct($p, $strXML, $arrValues, $arrIndex);
    xml_parser_free($p);
    
    // Buscar los valores de la cotizacion, poliza, etc
    foreach($arrValues as $arrLinea) {
      if($arrLinea["tag"] == "MOVIMIENTO") {
        $arrCoberturas["datos"]["no_cotizacion"] = $arrLinea["attributes"]["NOCOTIZACION"];
        $arrCoberturas["datos"]["no_endoso"    ] = $arrLinea["attributes"]["NOENDOSO"    ];
        $arrCoberturas["datos"]["tipo_endoso"  ] = $arrLinea["attributes"]["TIPOENDOSO"  ];
        $arrCoberturas["datos"]["no_otra"      ] = $arrLinea["attributes"]["NOOTRA"      ];
        
        break;
      }
    }
    
    $intEnCobertura = 0;
    $intEnPrima     = 0;
    $intEnRecibo    = 0;
    foreach($arrValues as $arrLinea) {
      if($arrLinea["tag"] == "CODIGOERROR") {
        $arrCoberturas["error"] = $arrLinea["value"];
      } else if(($arrLinea["tag"] == "COBERTURAS") && ($arrLinea["level"] == "4")) {
        $intEnCobertura = $arrLinea["attributes"]["NOCOBERTURA"];
      } else if(($intEnCobertura != 0) && ($arrLinea["level"] == "5")) {
        $arrCoberturas["coberturas"][$intEnCobertura][strtolower($arrLinea["tag"])] = $arrLinea["value"];
      } else {
        $intEnCobertura = 0;
        
        if(($arrLinea["tag"] == "PRIMAS") && ($arrLinea["level"] == "3")) {
          $intEnPrima = 1;
        } else if(($intEnPrima != 0) && ($arrLinea["level"] == "4")) {
          $arrCoberturas["primas"][strtolower($arrLinea["tag"])] = $arrLinea["value"];
        } else {
          $intEnPrima = 0;
          
          if(($arrLinea["tag"] == "RECIBOS") && ($arrLinea["level"] == "3")) {
            $intEnRecibo = $arrLinea["attributes"]["NORECIBO"];
          } else if(($intEnRecibo != 0) && ($arrLinea["level"] == "4")) {
            $arrCoberturas["recibos"][$intEnRecibo][strtolower($arrLinea["tag"])] = $arrLinea["value"];
          } else {
            $intEnRecibo = 0;
          }
        }
      }
    }
    
    return $arrCoberturas;
  }
  
  function ObtenerResultadoFuncionWebService($strFuncion, $arrParametros = "") {
    $this->strFuncion    = $strFuncion   ;
    $this->arrParametros = $arrParametros;
    
    $arrHeaders["trace"       ] = 1;
    $arrHeaders["soap_version"] = SOAP_1_1;
    
    $this->__oResCliente = new WSSESoapClient($this->__uriMetodoConsulta . "?WSDL", $arrHeaders);
    
    $this->__oResCliente->setFunctionParams  ($arrParametros, $strFuncion, $this->__uriMetodoConsulta);
    eval('$rsResult = $this->__oResCliente->' . $strFuncion . '($arrParametros);');
  }
  
  function ObtenerCatalogoMarcasQualitas() {
    $strFuncion    = "listaMarcas";
    $arrParametros = array("cUsuario" => "LINEA", "cTarifa" => "LINEA");
    
    $this->__uriMetodoConsulta = "http://qbcenter.qualitas.com.mx/wsTarifa/wsTarifa.asmx";
    
    $this->ObtenerResultadoFuncionWebService($strFuncion, $arrParametros);
    
    
    $strXMLRes = $this->__oResCliente->__last_response;
    $strXMLRes = substr($strXMLRes, strpos($strXMLRes, "<datos"));
    $strXMLRes = substr($strXMLRes, strpos($strXMLRes, ">") + 1);
    $strXMLRes = substr($strXMLRes, 0, strpos($strXMLRes, "</datos"));
    
    $arrRes = Variables::ObtenerCadenasDelimitadas($strXMLRes, "<Elemento>", "</Elemento>");
    
    foreach($arrRes as $strLinea) {
      $strLinea = str_replace("<cMarca>"      , "", $strLinea);
      $strLinea = str_replace("</cMarcaLarga>", "", $strLinea);
      $arrT = explode("</cMarca><cMarcaLarga>", $strLinea);
      $arrRes2[] = array("clave" => $arrT[0], "nombre" => $arrT[1]);
    }
    
    return $arrRes2;
  }
  
  function ObtenerCatalogoModelosQualitas($strCveMarca, $strModelo) {
    $strFuncion    = "listaTarifas";
//    $arrParametros = array("cUsuario" => "LINEA", "cTarifa" => "LINEA", "cMarca" => "VW", "cTipo" => "POLO");
    $arrParametros = array("cUsuario" => "LINEA", "cTarifa" => "LINEA", "cMarca" => $strCveMarca, "cModelo" => $strModelo);
//    $arrParametros = array("cUsuario" => "LINEA", "cTarifa" => "LINEA");
    
    $this->__uriMetodoConsulta = "http://qbcenter.qualitas.com.mx/wsTarifa/wsTarifa.asmx";
    
    $this->ObtenerResultadoFuncionWebService($strFuncion, $arrParametros);
    
    $strXMLRes = $this->__oResCliente->__last_response;
    $strXMLRes = substr($strXMLRes, strpos($strXMLRes, "<datos"));
    $strXMLRes = substr($strXMLRes, strpos($strXMLRes, ">") + 1);
    $strXMLRes = substr($strXMLRes, 0, strpos($strXMLRes, "</datos"));
    
    $arrRes = Variables::ObtenerCadenasDelimitadas($strXMLRes, "<Elemento>", "</Elemento>");
    
    foreach($arrRes as $strLinea) {
      $strLinea = str_replace("<cTarifa>"     , "", $strLinea);
      $strLinea = str_replace("</cMarcaLarga>", "", $strLinea);
      
      $strLinea = str_replace("</cTarifa><cMarca>"         , ",||,", $strLinea);
      $strLinea = str_replace("</cMarca><cTipo>"           , ",||,", $strLinea);
      $strLinea = str_replace("</cTipo><cVersion>"         , ",||,", $strLinea);
      $strLinea = str_replace("</cVersion><cModelo>"       , ",||,", $strLinea);
      $strLinea = str_replace("</cModelo><CAMIS>"          , ",||,", $strLinea);
      $strLinea = str_replace("</CAMIS><cCategoria>"       , ",||,", $strLinea);
      $strLinea = str_replace("</cCategoria><cTransmision>", ",||,", $strLinea);
      $strLinea = str_replace("</cTransmision><cOcupantes>", ",||,", $strLinea);
      $strLinea = str_replace("</cOcupantes><nV1>"         , ",||,", $strLinea);
      $strLinea = str_replace("</nV1><nV2>"                , ",||,", $strLinea);
      $strLinea = str_replace("</nV2><cNvaAMIS>"           , ",||,", $strLinea);
      $strLinea = str_replace("</cNvaAMIS><cMarcaLarga>"   , ",||,", $strLinea);
      
      $arrT = explode(",||,", $strLinea);
      $arrRes2[] = array(
        "tarifa"       => $arrT[ 0],
        "marca"        => $arrT[ 1],
        "tipo"         => $arrT[ 2],
        "version"      => $arrT[ 3],
        "modelo"       => $arrT[ 4],
        "amis"         => $arrT[ 5],
        "categoria"    => $arrT[ 6],
        "transmision"  => $arrT[ 7],
        "ocupantes"    => $arrT[ 8],
        "nv1"          => $arrT[ 9],
        "nv2"          => $arrT[10],
        "nva_amis"     => $arrT[11],
        "nombre_marca" => $arrT[12]
      );
    }
    
    return $arrRes2;
  }
}

?>
